import { IPSCodeItem } from './ipscode-item';
import { IPSDataEntity } from '../dataentity/ipsdata-entity';
import { IPSDEField } from '../dataentity/defield/ipsdefield';
import { IPSDEDataSet } from '../dataentity/ds/ipsdedata-set';
import { IPSLanguageRes } from '../res/ipslanguage-res';
import { IPSSysPFPlugin } from '../res/ipssys-pfplugin';
import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';
import { IPSSystemModule } from '../system/ipssystem-module';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSCodeList
 */
export interface IPSCodeList extends IPSModelObject {
  /**
   * 开始值属性
   *
   * @type {IPSDEField}
   */
  getBeginValuePSDEField(): IPSDEField | null;

  /**
   * 开始值属性
   *
   * @type {IPSDEField}
   */
  get beginValuePSDEField(): IPSDEField | null;

  /**
   * 开始值属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getBeginValuePSDEFieldMust(): IPSDEField;

  /**
   * 缓存超时时长
   * @type {number}
   * @default -1
   */
  cacheTimeout: number;

  /**
   * 代码表标记
   * @type {string}
   */
  codeListTag: string;

  /**
   * 代码表类型
   * @description 值模式 [代码表类型] {STATIC：静态、 DYNAMIC：动态、 PREDEFINED：预定义 }
   * @type {( string | 'STATIC' | 'DYNAMIC' | 'PREDEFINED')}
   */
  codeListType: string | 'STATIC' | 'DYNAMIC' | 'PREDEFINED';

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 自定义条件
   * @type {string}
   */
  customCond: string;

  /**
   * 数据属性
   *
   * @type {IPSDEField}
   */
  getDataPSDEField(): IPSDEField | null;

  /**
   * 数据属性
   *
   * @type {IPSDEField}
   */
  get dataPSDEField(): IPSDEField | null;

  /**
   * 数据属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getDataPSDEFieldMust(): IPSDEField;

  /**
   * 禁用值属性
   *
   * @type {IPSDEField}
   */
  getDisablePSDEField(): IPSDEField | null;

  /**
   * 禁用值属性
   *
   * @type {IPSDEField}
   */
  get disablePSDEField(): IPSDEField | null;

  /**
   * 禁用值属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getDisablePSDEFieldMust(): IPSDEField;

  /**
   * 动态实例模式
   * @description 值模式 [动态实例模式（支持副本）] {0：不启用、 1：启用、 2：启用副本 }
   * @type {( number | 0 | 1 | 2)}
   */
  dynaInstMode: number | 0 | 1 | 2;

  /**
   * 动态实例标记
   * @type {string}
   */
  dynaInstTag: string;

  /**
   * 动态实例标记2
   * @type {string}
   */
  dynaInstTag2: string;

  /**
   * 空白显示文本
   * @type {string}
   */
  emptyText: string;

  /**
   * 空白显示文本语言资源
   *
   * @type {IPSLanguageRes}
   */
  getEmptyTextPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 空白显示文本语言资源
   *
   * @type {IPSLanguageRes}
   */
  get emptyTextPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 空白显示文本语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getEmptyTextPSLanguageResMust(): IPSLanguageRes;

  /**
   * 结束值属性
   *
   * @type {IPSDEField}
   */
  getEndValuePSDEField(): IPSDEField | null;

  /**
   * 结束值属性
   *
   * @type {IPSDEField}
   */
  get endValuePSDEField(): IPSDEField | null;

  /**
   * 结束值属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getEndValuePSDEFieldMust(): IPSDEField;

  /**
   * 图标样式属性
   *
   * @type {IPSDEField}
   */
  getIconClsPSDEField(): IPSDEField | null;

  /**
   * 图标样式属性
   *
   * @type {IPSDEField}
   */
  get iconClsPSDEField(): IPSDEField | null;

  /**
   * 图标样式属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getIconClsPSDEFieldMust(): IPSDEField;

  /**
   * 图标样式(x)属性
   *
   * @type {IPSDEField}
   */
  getIconClsXPSDEField(): IPSDEField | null;

  /**
   * 图标样式(x)属性
   *
   * @type {IPSDEField}
   */
  get iconClsXPSDEField(): IPSDEField | null;

  /**
   * 图标样式(x)属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getIconClsXPSDEFieldMust(): IPSDEField;

  /**
   * 图标路径(x)属性
   *
   * @type {IPSDEField}
   */
  getIconPathXPSDEField(): IPSDEField | null;

  /**
   * 图标路径(x)属性
   *
   * @type {IPSDEField}
   */
  get iconPathXPSDEField(): IPSDEField | null;

  /**
   * 图标路径(x)属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getIconPathXPSDEFieldMust(): IPSDEField;

  /**
   * 包含开始值模式
   * @description 值模式 [阈值组包含值模式] {0：不包含、 1：包含、 2：首项包含、 3：尾项包含 }
   * @type {( number | 0 | 1 | 2 | 3)}
   * @default 0
   */
  incBeginValueMode: number | 0 | 1 | 2 | 3;

  /**
   * 包含结束值模式
   * @description 值模式 [阈值组包含值模式] {0：不包含、 1：包含、 2：首项包含、 3：尾项包含 }
   * @type {( number | 0 | 1 | 2 | 3)}
   * @default 0
   */
  incEndValueMode: number | 0 | 1 | 2 | 3;

  /**
   * 默认排序方向
   * @description 值模式 [字段排序方向] {ASC：升序、 DESC：降序 }
   * @type {( string | 'ASC' | 'DESC')}
   */
  minorSortDir: string | 'ASC' | 'DESC';

  /**
   * 默认排序属性
   *
   * @type {IPSDEField}
   */
  getMinorSortPSDEField(): IPSDEField | null;

  /**
   * 默认排序属性
   *
   * @type {IPSDEField}
   */
  get minorSortPSDEField(): IPSDEField | null;

  /**
   * 默认排序属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getMinorSortPSDEFieldMust(): IPSDEField;

  /**
   * 多项代码表或模式
   * @description 值模式 [代码表或模式] {NUMBERORMODE：数字或处理、 STRINGORMODE：文本或模式 }
   * @type {( string | 'NUMBERORMODE' | 'STRINGORMODE')}
   */
  orMode: string | 'NUMBERORMODE' | 'STRINGORMODE';

  /**
   * 代码项集合
   *
   * @type {IPSCodeItem[]}
   */
  getPSCodeItems(): IPSCodeItem[] | null;

  /**
   * 代码项集合
   *
   * @type {IPSCodeItem[]}
   */
  get psCodeItems(): IPSCodeItem[] | null;

  findPSCodeItem(objKey: any): IPSCodeItem | null;

  /**
   * 平台代码表标识
   * @type {string}
   */
  psCodeListTemplId: string;

  /**
   * 平台代码表标识
   * @type {string}
   */
  getPSCodeListTemplId(): string;

  /**
   * 实体数据集对象
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 实体数据集对象
   *
   * @type {IPSDEDataSet}
   */
  get psDEDataSet(): IPSDEDataSet | null;

  /**
   * 实体数据集对象（必须存在）
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSetMust(): IPSDEDataSet;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  get psDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntityMust(): IPSDataEntity;

  /**
   * 前端扩展插件
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端扩展插件
   *
   * @type {IPSSysPFPlugin}
   */
  get psSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端扩展插件（必须存在）
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPluginMust(): IPSSysPFPlugin;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 父值属性
   *
   * @type {IPSDEField}
   */
  getPValuePSDEField(): IPSDEField | null;

  /**
   * 父值属性
   *
   * @type {IPSDEField}
   */
  get pValuePSDEField(): IPSDEField | null;

  /**
   * 父值属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getPValuePSDEFieldMust(): IPSDEField;

  /**
   * 预置代码表类型
   * @description 值模式 [代码表预置类型] {OPERATOR：系统操作者、 RUNTIME：运行时代码表、 MODULEINST：模块副本、 DEMAINSTATE：实体主状态、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'OPERATOR' | 'RUNTIME' | 'MODULEINST' | 'DEMAINSTATE' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  predefinedType: string | 'OPERATOR' | 'RUNTIME' | 'MODULEINST' | 'DEMAINSTATE' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 是否被引用
   * @type {boolean}
   */
  refFlag: boolean;

  /**
   * 所属系统标识
   * @type {string}
   */
  systemTag: string;

  /**
   * 显示文本属性
   *
   * @type {IPSDEField}
   */
  getTextPSDEField(): IPSDEField | null;

  /**
   * 显示文本属性
   *
   * @type {IPSDEField}
   */
  get textPSDEField(): IPSDEField | null;

  /**
   * 显示文本属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getTextPSDEFieldMust(): IPSDEField;

  /**
   * 文本分隔符
   * @type {string}
   */
  textSeparator: string;

  /**
   * 值属性
   *
   * @type {IPSDEField}
   */
  getValuePSDEField(): IPSDEField | null;

  /**
   * 值属性
   *
   * @type {IPSDEField}
   */
  get valuePSDEField(): IPSDEField | null;

  /**
   * 值属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getValuePSDEFieldMust(): IPSDEField;

  /**
   * 值分隔符
   * @type {string}
   */
  valueSeparator: string;

  /**
   * 代码项值为数值
   * @type {boolean}
   * @default false
   */
  codeItemValueNumber: boolean;

  /**
   * 启用缓存
   * @type {boolean}
   * @default false
   */
  enableCache: boolean;

  /**
   * 模块实例代码表
   * @type {boolean}
   * @default false
   */
  moduleInstCodeList: boolean;

  /**
   * 子系统以云服务方式提供
   * @type {boolean}
   * @default false
   */
  subSysAsCloud: boolean;

  /**
   * 子系统代码表
   * @type {boolean}
   * @default false
   */
  subSysCodeList: boolean;

  /**
   * 阈值组
   * @type {boolean}
   * @default false
   */
  thresholdGroup: boolean;

  /**
   * 用户范围
   * @type {boolean}
   * @default false
   */
  userScope: boolean;
}
